package br.eng.eliseu.gwt.gestaoWeb.model.pessoa;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.SequenceGenerator;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import br.eng.eliseu.gwt.gestaoWeb.client.util.StringUtil;
import br.eng.eliseu.gwt.gestaoWeb.model.BaseEntity;
import br.eng.eliseu.gwt.gestaoWeb.model.empresa.Empresa;

@Entity
@SequenceGenerator(name="SQ_PESSOA", sequenceName="SQ_PESSOA")
@NamedQueries({
	@NamedQuery(name = "pessoa.porTipoNome", query = "select u from Pessoa u where 1=1 "+
		"and u.tipoPessoa = :tipoPessoa "+
		"and upper( u.nome ) like upper( :nome ) "),
	@NamedQuery(name = "pessoa.porPessoa", query = "select u from Pessoa u where 1=1 "+
			"and u = :pessoa ")
	})

public class Pessoa extends BaseEntity{

	private static final long serialVersionUID = 2646870564089416742L;

	public Pessoa() {}
	
	@Id
	@GeneratedValue(generator="SQ_PESSOA", strategy=GenerationType.AUTO)
	private Integer id;

	@ManyToOne
	@JoinColumn(name="empresa_id")
	private Empresa empresa;
	
	@Enumerated(EnumType.STRING)
	@Column(length=10)
	private TipoPessoaEnum tipoPessoa;
	
//	@Column(length=16)
//	private String documento;
	
	@Column(length=254)
	private String nome;
	
	@Temporal(value=TemporalType.DATE)
	private Date dtNascimento;
	
	@Temporal(value=TemporalType.DATE)
	private Date dtObito;

	@Column(length=1)
	@Enumerated(EnumType.STRING)
	private TipoSexoEnum sexo;

	
	
	public Integer getId() {
		return id;
	}
	public void setId(Integer id) {
		this.id = id;
	}
	public Empresa getEmpresa() {
		return empresa;
	}
	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}
	public TipoPessoaEnum getTipoPessoa() {
		return tipoPessoa;
	}
	public void setTipoPessoa(TipoPessoaEnum tipoPessoa) {
		this.tipoPessoa = tipoPessoa;
	}
	public String getNome() {
		return nome;
	}
	public void setNome(String nome) {
		if (nome!=null && !"".equals(nome)){
			nome = StringUtil.padronizaNome(nome);
		}
		this.nome = nome;
	}
	public Date getDtNascimento() {
		return dtNascimento;
	}
	public void setDtNascimento(Date dtNascimento) {
		this.dtNascimento = dtNascimento;
	}
	public Date getDtObito() {
		return dtObito;
	}
	public void setDtObito(Date dtObito) {
		this.dtObito = dtObito;
	}
	public TipoSexoEnum getSexo() {
		return sexo;
	}
	public void setSexo(TipoSexoEnum sexo) {
		this.sexo = sexo;
	}
	
}
